using System;
using System.Collections.Generic;

namespace Test.ConsoleProgram.Algorithm.Solution
{
    [TestDescription("算法: 0415. 字符串相加")]
    public class No0415_AddStrings : AbsBaseTestItem
    {
        /*
        给定两个字符串形式的非负整数 num1 和num2 ，计算它们的和。
        注意：
            num1 和num2 的长度都小于 5100.
            num1 和num2 都只包含数字 0-9.
            num1 和num2 都不包含任何前导零。
            你不能使用任何內建 BigInteger 库， 也不能直接将输入的字符串转换为整数形式。
        */

        public override void OnTest()
        {
            Assert.TestExe(AddStrings, "1", "2", "3");
            Assert.TestExe(AddStrings, "10", "22", "32");
            Assert.TestExe(AddStrings, "52", "9", "61");
            Assert.TestExe(AddStrings, "846", "485", "1331");
            Assert.TestExe(AddStrings, "5484256", "8432542", "13916798");
        }

        public string AddStrings(string num1, string num2)
        {
            var ans = new List<int>();
            int i = num1.Length - 1, j = num2.Length - 1, add = 0;
            while (i >= 0 || j >= 0 || add != 0)
            {
                int x = i >= 0 ? num1[i] - '0' : 0;
                int y = j >= 0 ? num2[j] - '0' : 0;
                int result = x + y + add;
                ans.Add(result % 10);
                add = result / 10;
                i--;
                j--;
            }
            ans.Reverse();
            return string.Join("", ans);
        }
    }
}
